home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / elk-2_0.lha / elk-2.0 / contrib / eval-a-string / elk-eval.c next >
C/C++ Source or Header  |  1992-11-08  |  995b  |  47 lines

  1. #include "scheme.h"
  2.  
  3. static Object in, out;
  4.  
  5. static char *String_Eval(expr) char *expr; {
  6.     Object str, res;
  7.     char *p;
  8.     GC_Node;
  9.     static char buf[1024];
  10.     Declare_C_Strings;
  11.  
  12.     str = Make_String(expr, strlen(expr));
  13.     PORT(in)->name = str;
  14.     PORT(in)->ptr = 0;
  15.     res = General_Read(in, 0);
  16.     GC_Link(res);
  17.     res = Eval(res);
  18.     (void)General_Print_Object(res, out, 1);
  19.     str = P_Get_Output_String(out);
  20.     Make_C_String(str, p);
  21.     if (strlen(p) > sizeof buf - 1)
  22.     p = "too long";
  23.     strcpy(buf, p);
  24.     Dispose_C_Strings;
  25.     GC_Unlink;
  26.     return buf;
  27. }
  28.  
  29. char *Elk_Eval(expr) char *expr; {
  30.     char *s;
  31.  
  32.     s = String_Eval("\
  33.     (call-with-current-continuation (lambda (c)\
  34.       (set! error-handler (lambda a (print a) (c #f))) #t))\
  35.     ");
  36.     if (strcmp(s, "#f") == 0)
  37.     return 0;
  38.     return String_Eval(expr);
  39. }
  40.  
  41. init_eval() {
  42.     in = P_Open_Input_String(Make_String("", 0));
  43.     Global_GC_Link(in);
  44.     out = P_Open_Output_String();
  45.     Global_GC_Link(out);
  46. }
  47.